From 904141e5e30e923f7f7ccaa65894a1fbb51dfc65 Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Sat, 7 May 2005 10:14:55 +0000 Subject: [PATCH] bitkeeper revision 1.1389.5.30 (427c951f6ULpkuxG36TskUioGnRY9w) x86_64 gcc sometimes doesn't have builtin memmove. Always use the version we provide. Signed-off-by: Keir Fraser --- xen/arch/x86/string.c | 38 ++++++++++++++--------------- xen/include/asm-x86/x86_64/string.h | 8 +++--- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/xen/arch/x86/string.c b/xen/arch/x86/string.c index b45a9197d5..745670b926 100644 --- a/xen/arch/x86/string.c +++ b/xen/arch/x86/string.c @@ -8,25 +8,6 @@ #include #include -#undef memmove -void *memmove(void *dest, const void *src, size_t n) -{ - int d0, d1, d2; - - if ( dest < src ) - return memcpy(dest, src, n); - - __asm__ __volatile__ ( - " std ; " - " rep ; movsb ; " - " cld " - : "=&c" (d0), "=&S" (d1), "=&D" (d2) - : "0" (n), "1" (n-1+(const char *)src), "2" (n-1+(char *)dest) - : "memory"); - - return dest; -} - #undef memcpy void *memcpy(void *dest, const void *src, size_t n) { @@ -61,3 +42,22 @@ void *memset(void *s, int c, size_t n) return s; } + +#undef memmove +void *memmove(void *dest, const void *src, size_t n) +{ + int d0, d1, d2; + + if ( dest < src ) + return memcpy(dest, src, n); + + __asm__ __volatile__ ( + " std ; " + " rep ; movsb ; " + " cld " + : "=&c" (d0), "=&S" (d1), "=&D" (d2) + : "0" (n), "1" (n-1+(const char *)src), "2" (n-1+(char *)dest) + : "memory"); + + return dest; +} diff --git a/xen/include/asm-x86/x86_64/string.h b/xen/include/asm-x86/x86_64/string.h index 6c1cc902f9..613c982718 100644 --- a/xen/include/asm-x86/x86_64/string.h +++ b/xen/include/asm-x86/x86_64/string.h @@ -1,10 +1,6 @@ #ifndef _X86_64_STRING_H_ #define _X86_64_STRING_H_ -#define __HAVE_ARCH_MEMMOVE -#define memmove(dest,src,n) (__memmove((dest),(src),(n))) -#define __memmove(dest,src,n) (__builtin_memmove((dest),(src),(n))) - #define __HAVE_ARCH_MEMCPY #define memcpy(t,f,n) (__memcpy((t),(f),(n))) #define __memcpy(t,f,n) (__builtin_memcpy((t),(f),(n))) @@ -13,4 +9,8 @@ #define memset(s, c, count) (__memset((s),(c),(count))) #define __memset(s, c, count) (__builtin_memset((s),(c),(count))) +/* Some versions of 64-bit gcc don't have this built in. */ +#define __HAVE_ARCH_MEMMOVE +extern void *memmove(void *dest, const void *src, size_t n); + #endif -- 2.30.2